//   2025.03.29 02:21 星期六 雨 今天 好伤心 不知 为什么

import { global_duration_time } from '../../../DataDefine/sourceData';
import { toStringTypeCheck } from '../../../Func/uniFunc/Func';

// 这个是 css 中 animation class obj 基础 样式 信息
// 可以进行详细更改
// 然后 tostring  生成对应的 css string

const animation_objTag = 'animation_obj';

class animation_obj {
  get [Symbol.toStringTag]() {
    return animation_objTag;
  }

  constructor() {}

  /**
   * 设定 animation 的名字
   * @param {string} newVal
   */
  set name(newVal) {
    this.#name = newVal;
    this.keyframeName = this.#name + '_keyframe';
  }

  /**
   * 获取 当前 animation 的名字
   */
  get name() {
    return this.#name;
  }

  #name;

  /**
   * 关键帧 名字
   */
  keyframeName;

  /**
   * 关键帧 集
   */
  keyframeName_s;

  /**
   * 延迟时间 单位 s
   * @type {number}
   */
  delay = 0;

  /**
   * 运动时间 单位 s
   * @type {number}
   */
  duration = global_duration_time;

  /**
   * 运动 函数
   * @type {string | Function}
   */
  timing_function = 'ease-in-out';

  /**
   * 最终 位置信息
   * @type {string}
   */
  fill_mode = 'forwards';

  /**
   * 添加 新 的 动画 帧
   * @param {string | string[]} keyframe_name_arr
   */
  add_new_keyframeName(keyframe_name_arr) {
    this.keyframeName_s = this.keyframeName_s || this.keyframeName;
    if (keyframe_name_arr == undefined) {
      return;
    }
    if (toStringTypeCheck(keyframe_name_arr, 'string')) {
      keyframe_name_arr = [keyframe_name_arr];
    }
    let str = keyframe_name_arr.join(',\n\t\t\t');

    this.keyframeName_s += ',\n\t\t\t' + str;
  }

  /**
   *
   * @returns {string} 当前 对象 的 animation 信息 字符串
   */
  toCssString() {
    this.add_new_keyframeName();
    return `animation-name: ${this.keyframeName_s};
        animation-duration: ${this.duration}s;
        animation-delay: ${this.delay}s;
        animation-timing-function: ${this.timing_function};
        animation-fill-mode: ${this.fill_mode};`;
  }
}

export { animation_obj };
